﻿#region license
# This file is part of Grawlix.
# 
# Grawlix is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of
# the License, or (at your option) any later version.
# 
# Grawlix is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public
# License along with Grawlix.  If not, see
# <http://www.gnu.org/licenses/>.
#endregion

"""A resolver service for game URIs into streams."""

namespace Grawlix.Services.Resources
import System

interface IStreamResolver:
"""
A service that resolves URIs into streams.
Remarks: Note that this considered an advanced class only intended to be
	used by those who wish to develop their own resources.
"""
	
	def Open(uri as Uri, allowLocal as bool) as IO.Stream
	"""
	Open a read-only stream from the disk.
	Param uri: The URI which identifies the stream.
	Param allowLocal: Whether to allow local URI schemes,
		such as file:// and internal://.
	Returns: The newly opened stream.
	Raises IOException: A generic I/O error occurred.
	Raises FileNotFoundException: The URI could not be resolved.
	Remarks: Note that this is a blocking operation which should only be
		called asynchronously to avoid making the game hang. Reading from
		the stream is also a blocking operation.
	"""
	
	def TryOpen(uri as Uri, allowLocal as bool) as IO.Stream
	"""
	Open a read-only stream from the disk.
	Param uri: The URI which identifies the stream.
	Param allowLocal: Whether to allow local URI schemes,
		such as file:// and internal://.
	Returns: The newly opened stream, or null if not found.
	Raises IOException: A generic I/O error occurred.
	Remarks: Note that this is a blocking operation which should only be
		called asynchronously to avoid making the game hang. Reading from
		the stream is also a blocking operation.
	"""
	
